package com.liuyucheng.util;

import lombok.extern.slf4j.Slf4j;

import java.util.Random;

@Slf4j
public class RandomUtil {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        log.info("开始时间：{}",start);
        ramdonArr(25000, 50000);
        log.info("结束时间：{}",System.currentTimeMillis()-start);
//        me();
    }

    private static void ramdonArr(int destNum, int totalNum) {
        /*
         * 为数组元素每一项开始赋值，遍历赋值过的数组元素
         * 当数组元素重复时，i-- 并跳出此次循环，重新赋值
         * */

        //随机数的数量
        int [] num = new int[destNum];
        for(int i = 0;i<num.length;i++) {
            //每个随机数的值
            num[i] = (int) (Math.random()* totalNum +1);

            //如果这个随机数和前面拿到的随机数重复了，下标-1重新取
            for(int j =0;j<i;j++) {
                if(num[i] == num[j]) {
                    i--;
                    break;
                }
            }
        }
        for (int j : num) {
            System.out.println(j);
        }
    }


    public static void me(){
        //初始化给定范围的待选数组
        /* 将给定范围的所有元素放入一个数组中
         * 在初始化的无重复待选数组中随机产生一个数放入结果中，
         * 将待选数组被随机到的数，用待选数组(len-1)下标对应的数替换
         * 然后从len-2里随机产生下一个随机数，如此类推
         * */

        int len = 30;
        int[] source = new int[len];
        for (int i = 1; i < 31; i++) {
            source[i - 1] = i;
        }
        int index = 0;
        int[] arr = new int[6];
        Random r = new Random();
        for (int i = 0; i < arr.length; i++) {
            int nextInt = r.nextInt();
            log.info("nextInt:{},len:{}",nextInt,len);
            index = Math.abs(nextInt % len--);
            arr[i] = source[index];
            System.out.println(arr[i]);
        }
    }
}
